package com.renyr.factory;


import com.renyr.abstractfactory.FactoryForApple;
import com.renyr.abstractfactory.FactoryForBanana;

public class Salad {
    //客户端代码只需要将相应的参数传入即可得到对象
    //用户不需要了解工厂类内部的逻辑。

    /**
     * 静态工厂
     * 常用的工厂模式是静态工厂，利用static方法，作为一种类似于常见的工具类Utils等辅助效果，一般情况下工厂类不需要实例化
     * @param name
     */
    public void get(String name){
        Fruits fruits = null ;
        switch (name){
            case "A" :
                fruits = StaticFactory.getApple();
                break;
            case "B" :
                fruits = StaticFactory.getBanana();
                break;
        }
    }

    /**
     * 抽象工厂
     *
     * 一个基础接口定义了功能，每个实现接口的子类就是产品，然后定义一个工厂接口，实现了工厂接口的就是工厂，
     * 这时候，接口编程的优点就出现了，我们可以新增产品类（只需要实现产品接口），只需要同时新增一个工厂类，
     * 客户端就可以轻松调用新产品的代码
     */
    public void abstractFactory (String name){
        Fruits fruits = null;
        switch (name){
            case "A" :
                fruits = new FactoryForApple().get();
                break;
            case "B" :
                fruits = new FactoryForBanana().get();
                break;
        }
    }
}
